import tkinter as tk
from tkinter import messagebox, ttk


class FieldDialog(tk.Toplevel):
    def __init__(self, parent, field=None):
        super().__init__(parent)
        self.title("数据项编辑")
        self.geometry("300x200")
        self.resizable(False, False)

        # 设置模态
        self.transient(parent)
        self.grab_set()

        self.field = field
        self.result = None
        self._init_ui()

        if field:
            self._load_field(field)

        # 使用 after 方法延迟执行居中显示
        self.after(10, lambda: parent.app.center_dialog(self))

    def _init_ui(self):
        main_frame = ttk.Frame(self, padding="10")
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 字段名称
        ttk.Label(main_frame, text="字段名称:").pack(fill=tk.X)
        self.name_input = ttk.Entry(main_frame)
        self.name_input.pack(fill=tk.X)

        # 字段代码
        ttk.Label(main_frame, text="字段代码:").pack(fill=tk.X)
        self.code_input = ttk.Entry(main_frame)
        self.code_input.pack(fill=tk.X)

        # 字段描述
        ttk.Label(main_frame, text="字段描述:").pack(fill=tk.X)
        self.desc_input = ttk.Entry(main_frame)
        self.desc_input.pack(fill=tk.X)

        # 按钮区域
        btn_frame = ttk.Frame(main_frame)
        btn_frame.pack(fill=tk.X, pady=(10, 0))

        ttk.Button(btn_frame, text="确定", command=self._on_ok).pack(
            side=tk.LEFT, padx=5
        )
        ttk.Button(btn_frame, text="取消", command=self._on_cancel).pack(side=tk.LEFT)

    def _load_field(self, field):
        """加载现有字段数据"""
        self.name_input.insert(0, field["name"])
        self.code_input.insert(0, field["code"])
        self.desc_input.insert(0, field.get("description", ""))

    def _on_ok(self):
        """确定按钮处理"""
        self.result = {
            "name": self.name_input.get().strip(),
            "code": self.code_input.get().strip(),
            "description": self.desc_input.get().strip(),
        }

        if not self.result["name"] or not self.result["code"]:
            messagebox.showerror("错误", "字段名称和代码不能为空")
            return

        self.destroy()

    def _on_cancel(self):
        """取消按钮处理"""
        self.destroy()
